﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model;
using RegraNegocio;

namespace PedidoWeb.Telas
{
    public partial class Fornecedor : System.Web.UI.Page
    {
        private Model.Fornecedor fornecedor = null;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            habilitaCampo("0");
        }

        private void preencheGrid(Model.Fornecedor fornecedor)
        {
            try
            {
                List<Model.Fornecedor> fornecedorsRecuperadas = FornecedorBO.getInstance().recuperarFornecedores(fornecedor);

                dtgResultado.DataSource = fornecedorsRecuperadas;
                dtgResultado.DataBind();
                dtgResultado.Visible = true;
                return;
            }
            catch (Exception cause)
            {
                dtgResultado.DataSource = null;
                dtgResultado.Visible = false;
                lblException.Text = (cause.Message);
            }
        }

        private void limpacampo()
        {
            txtNome.Text = "";
            txtCpfCnpj.Text = "";
            txtCidade.Text = "";
            txtEnderco.Text = "";
            txtTel1.Text = "";
            txtTel2.Text = "";
            txtTel3.Text = "";
            txtBairro.Text = "";
            txtCodigo.Text = "";
            txtUf.Text = "";
        }

        private void limpaMensagem()
        {
            lblException.Text = "";
        }

        private void habilitaCampo(String cmbAcao)
        {
            if (cmbAcao.Equals("0"))
            {
                txtCodigo.Enabled = false;
                txtNome.Enabled = true;
                txtCpfCnpj.Enabled = true;
                txtCidade.Enabled = true;
                txtEnderco.Enabled = true;
                txtTel1.Enabled = true;
                txtTel2.Enabled = true;
                txtTel3.Enabled = true;
                txtBairro.Enabled = true;
                txtUf.Enabled = true;
            }
            else if (cmbAcao.Equals("1"))
            {
                txtCodigo.Enabled = true;
                txtNome.Enabled = true;
                txtCpfCnpj.Enabled = true;
                txtCidade.Enabled = false;
                txtEnderco.Enabled = false;
                txtTel1.Enabled = false;
                txtTel2.Enabled = false;
                txtTel3.Enabled = false;
                txtBairro.Enabled = false;
                txtUf.Enabled = false;

            }
            else if (cmbAcao.Equals("2"))
            {
                txtCodigo.Enabled = true;
                txtNome.Enabled = true;
                txtCpfCnpj.Enabled = true;
                txtCidade.Enabled = true;
                txtEnderco.Enabled = true;
                txtTel1.Enabled = true;
                txtTel2.Enabled = true;
                txtTel3.Enabled = true;
                txtBairro.Enabled = true;
                txtUf.Enabled = true;
            }
            else
            {
                txtCodigo.Enabled = true;
                txtNome.Enabled = false;
                txtCpfCnpj.Enabled = false;
                txtCidade.Enabled = false;
                txtEnderco.Enabled = false;
                txtTel1.Enabled = false;
                txtTel2.Enabled = false;
                txtTel3.Enabled = false;
                txtBairro.Enabled = false;
                txtUf.Enabled = false;
            }
        }

        private bool validador()
        {
            int number;

            if (Int32.TryParse(txtUf.Text, out number))
            {
                lblException.Text = "UF não pode ser números";
                lblException.Font.Bold = true;
                return false;
            }

            else if (!Int32.TryParse(txtCpfCnpj.Text, out number))
            {
                lblException.Text = "CPF/CPNJ não pode ser letras";
                lblException.Font.Bold = true;
                return false;
            }

            else if (!Int32.TryParse(txtTel1.Text, out number) ||
                  !Int32.TryParse(txtTel2.Text, out number) ||
                    !Int32.TryParse(txtTel3.Text, out number))
            {
                lblException.Text = "Telefones não podem ser letras";
                lblException.Font.Bold = true;
                return false;
            }
            else
            {
                return true;
            }
        }

        protected void btnAcao_Click(object sender, EventArgs e)
        {

            try
            {
                fornecedor = new Model.Fornecedor();

                if (cmbAcao.SelectedIndex.Equals(0))
                {
                    if (!validador())
                    {
                        return;
                    }
                    fornecedor.Nome = txtNome.Text;
                    fornecedor.Cnpj = txtCpfCnpj.Text;
                    fornecedor.Cidade = txtCidade.Text;
                    fornecedor.Endereco = txtEnderco.Text;
                    fornecedor.Tel1 = txtTel1.Text;
                    fornecedor.Tel2 = txtTel2.Text;
                    fornecedor.Tel3 = txtTel3.Text;
                    fornecedor.Bairro = txtBairro.Text;
                    fornecedor.Uf = txtUf.Text;


                    FornecedorBO.getInstance().gravar(fornecedor);
                    limpacampo();
                    lblException.Text = ("Sucesso Inclusão");
                    lblException.Font.Bold = true;
                }

                else if (cmbAcao.SelectedIndex.Equals(1))
                {
                    if (txtCodigo.Text.Equals(""))
                    {
                        fornecedor.Codigo = 0;
                    }
                    if (txtCodigo.Text.Equals("") && txtNome.Text.Equals(""))
                    {
                        lblException.Text = ("Digite Código, Nome, CPFCNPJ");
                        lblException.Font.Bold = true;
                        return;
                    }
                    else
                    {
                        fornecedor.Codigo = Int32.Parse(txtCodigo.Text);
                    }

                    limpacampo();
                    habilitaCampo("1");
                    preencheGrid(fornecedor);
                }

                else if (cmbAcao.SelectedIndex.Equals(2))
                {
                    if (!validador())
                    {
                        return;
                    }
                    fornecedor.Codigo = int.Parse(txtCodigo.Text);
                    fornecedor.Nome = txtNome.Text;
                    fornecedor.Cnpj = txtCpfCnpj.Text;
                    fornecedor.Cidade = txtCidade.Text;
                    fornecedor.Endereco = txtEnderco.Text;
                    fornecedor.Tel1 = txtTel1.Text;
                    fornecedor.Tel2 = txtTel2.Text;
                    fornecedor.Tel3 = txtTel3.Text;
                    fornecedor.Bairro = txtBairro.Text;
                    fornecedor.Uf = txtUf.Text;


                    FornecedorBO.getInstance().alterar(fornecedor);
                    limpacampo();
                    lblException.Text = "Sucesso alteração";
                    lblException.Font.Bold = true;
                }

                else if (cmbAcao.SelectedIndex.Equals(3))
                {
                    if (txtCodigo.Text.Equals(""))
                    {
                        lblException.Text = "Digite um código";
                        lblException.Font.Bold = true;
                        return;
                    }

                    fornecedor.Codigo = Int32.Parse(txtCodigo.Text);
                    if (FornecedorBO.getInstance().excluir(fornecedor))
                    {

                        cmbAcao.SelectedIndex = 3;

                        preencheGrid(fornecedor);
                        limpacampo();
                        lblException.Text = "Sucesso exclusão";
                        lblException.Font.Bold = true;
                    }
                    else
                    {
                        lblException.Text = ("Erro na exclusão do fornecedor.");
                        lblException.Font.Bold = true;
                    }
                }
            }
            catch (Exception ec)
            {
                lblException.Text = ec.ToString();
                lblException.Font.Bold = true;
            }

        }

        protected void cmbAcao_SelectedIndexChanged(object sender, EventArgs e)
        {
            limpaMensagem();
            habilitaCampo(cmbAcao.SelectedValue);
        }
    }
}